#pragma once
#include "const.hpp"

template <typename In, 
          typename Koeff1 = IntConst<1>, 
          typename Koeff2 = IntConst<1>, 
          typename Koeff3 = IntConst<1>, 
          typename Koeff4 = IntConst<1>, 
          typename Koeff5 = IntConst<1>, 
          typename Koeff6 = IntConst<1>, 
          typename Koeff7 = IntConst<1>, 
          typename Koeff8 = IntConst<1>, 
          typename Koeff9 = IntConst<1>, 
          typename Koeff10 = IntConst<1> >
class Amplifier
{
public:
    typedef float ReturnType;
    float operator()()
    {
        return koeff1_() * 
            koeff2_() * 
            koeff3_() * 
            koeff4_() * 
            koeff5_() * 
            koeff6_() * 
            koeff7_() * 
            koeff8_() * 
            koeff9_() * 
            koeff10_() * 
            in_();
    }
private:
    In in_;
    Koeff1 koeff1_;
    Koeff2 koeff2_;
    Koeff3 koeff3_;
    Koeff4 koeff4_;
    Koeff5 koeff5_;
    Koeff6 koeff6_;
    Koeff7 koeff7_;
    Koeff8 koeff8_;
    Koeff9 koeff9_;
    Koeff10 koeff10_;
};
